#!/bin/bash

# Функция для подсветки текста
color_text() {
  echo -e -n "\e[$1m$2\e[0m"
}

# Цветовые коды
color_red=31
color_green=32
color_yellow=33
color_blue=34
color_magenta=35
color_cyan=36
color_white=37

# echo
# ascii_art=$(cat <<'EOF'
# **********************************
# *   █████╗ ███╗   ███╗██╗   ██╗  *
# *  ██╔══██╗████╗ ████║██║   ██║  *
# *  ███████║██╔████╔██║██║   ██║  *
# *  ██╔══██║██║╚██╔╝██║╚██╗ ██╔╝  *
# *  ██║  ██║██║ ╚═╝ ██║ ╚████╔╝   *
# *  ╚═╝  ╚═╝╚═╝     ╚═╝  ╚═══╝    *
# **********************************
# EOF
# )
# # Вывод ASCII арта
# color_text "$color_white" "$ascii_art"

# Информация о системе
echo
color_text "$color_white" "  **************************************"
# color_text "$color_cyan" "  Информация о системе:"
echo
color_text "$color_white" "  *   █████╗   ███╗   ███╗  ██╗   ██╗  *"
color_text "$color_cyan" "    Хост: "
color_text "$color_red" "$(hostname)"
echo
color_text "$color_white" "  *  ██╔══██╗  ████╗ ████║  ██║   ██║  *"
color_text "$color_cyan" "    Время работы: "
color_text "$color_white" "$(uptime -p | sed 's/up //') | "
color_text "$color_cyan" "AVG: "
color_text "$color_white" "$(cat /proc/loadavg | cut -d ' ' -f 1-3)"
echo
color_text "$color_white" "  *  ███████║  ██╔████╔██║  ██║   ██║  *"
color_text "$color_cyan" "    Дистрибутив: "
# color_text "$color_white" "$(lsb_release -d | awk -F'\t' '{print $2}')"
color_text "$color_white" "$(grep PRETTY_NAME /etc/os-release | cut -d'"' -f2)"
echo
color_text "$color_white" "  *  ██╔══██║  ██║╚██╔╝██║  ╚██╗ ██╔╝  *"
color_text "$color_cyan" "    Ядро: "
color_text "$color_white" "$(uname -r)"
echo
color_text "$color_white" "  *  ██║  ██║  ██║ ╚═╝ ██║   ╚████╔╝   *"
color_text "$color_cyan" "    CPU & MEM: "
color_text "$color_white" "$(grep -c '^processor' /proc/cpuinfo) Cores / $(free -h | awk '/Mem:/ {print $2}') | ($(grep 'model name' /proc/cpuinfo | uniq | awk -F': ' '{print $2}'))"
echo
color_text "$color_white" "  *  ╚═╝  ╚═╝  ╚═╝     ╚═╝    ╚═══╝    *"

# Информация о сетевых интерфейсах
ip addr | awk '/^[0-9]+:/ {print $2}' | sed 's/://' | while read -r iface; do
  # Исключаем lo и интерфейсы Docker'а
  if [[ "$iface" != "lo" && "$iface" != docker* && "$iface" != br-* && "$iface" != veth* ]]; then
    # Получаем IP-адреса с маской подсети
    ip_address=$(ip addr show "$iface" | grep -oP '(?<=inet\s)\d+(\.\d+){3}/\d+')
    # ip6_address=$(ip addr show "$iface" | grep -oP '(?<=inet6\s)[\da-f:]+/\d+')
    # Получаем MAC-адрес
    mac_address=$(ip addr show "$iface" | awk '/ether/ {print $2}')
    color_text "$color_cyan" "    Сеть: "
    color_text "$color_red" "$ip_address "
    color_text "$color_white" "| $iface "
    color_text "$color_white" "($mac_address)"
  fi
done
echo
color_text "$color_white" "  **************************************"

# Информация о дисках
echo
color_text "$color_cyan" "  Информация о дисках:"
echo
df -h --output=fstype,size,used,avail,pcent,target,source | tail -n +2 | grep -v -e 'tmpfs' -e 'devtmpfs' | while read -r line; do
  # Разбор строки
  device=$(echo "$line" | awk '{print $7}')
  fs_type=$(echo "$line" | awk '{print $1}')
  size=$(echo "$line" | awk '{print $2}')
  used=$(echo "$line" | awk '{print $3}')
  avail=$(echo "$line" | awk '{print $4}')
  pcent=$(echo "$line" | awk '{print $5}' | sed 's/%//')
  mount=$(echo "$line" | awk '{print $6}')
  
  # Определение цвета по проценту использования
  if [ "$pcent" -ge 90 ]; then
    color_left=$color_red
    color_right=$color_red
  elif [ "$pcent" -ge 75 ]; then
    color_left=$color_yellow
    color_right=$color_yellow
  else
    color_left=$color_cyan
    color_right=$color_white
  fi

  # Вывод информации о диске
  color_text "$color_left" "    $device ($mount) [$fs_type]: "
  color_text "$color_right" "$pcent% использовано, $avail свободно из $size"
  echo
done


# Информация о удалённых подключениях
echo
color_text "$color_cyan" "  Информация об удаленных подключениях:"
echo
# Выполняем команду и сохраняем вывод в переменную
output=$(last -n 5 -i -w | grep "pts")

# Проверяем, есть ли результаты
if [ -z "$output" ]; then
      color_text "$color_white" "    Удаленные подключения отсутствуют!"
      echo
    exit 0
fi


# Обрабатываем каждую строку
while IFS= read -r line; do
    # Извлекаем необходимые части строки
    user=$(echo "$line" | awk '{print $1}')
    pts=$(echo "$line" | awk '{print $2}')
    ip=$(echo "$line" | awk '{print $3}')
    date=$(echo "$line" | awk '{print $4" "$5" "$6" "$7}')
    state=$(echo "$line" | awk '{for(i=8;i<=NF;i++) printf $i" "; print ""}' | sed 's/\s\+/ /g' | xargs)

    # Определяем, активна ли сессия
    if [[ "$state" == "still logged in" ]]; then
        state="(logged in)"
    else
        state="($state)"
    fi

    # Форматируем и выводим результат
    if [[ "$ip" != 0.0.0.0 ]]; then
      if [[ "$state" == "(logged in)" ]]; then
        color_text "$color_yellow" "    $user@$ip: $pts, $date $state"
        echo
      else
        color_text "$color_white" "    $user@$ip: $pts, $date $state"
        echo
      fi
    fi
done <<< "$output"

echo

